package com.cskaoyan.javase.oop2._1extends._11final._3variable._3static;

/**
 * final修饰静态成员变量（常用）
 * final修饰静态成员变量表示一个静态的"常量"
 * 在类的全局仅有一份，所以final修饰静态成员变量，也称之为"全局常量"。
 * 它是一个真正意义上的常量，不会因为创建对象而更改，实际开发中的常量多使用它。
 *
 * 语法：
 * [访问权限修饰符] static final 数据类型 变量名;
 *
 * 和final修饰成员变量一样，全局常量的取值也不能依赖于默认值，必须 （在类加载过程中）明确一个值。这样静态成员变量的赋值方式还有（除去默认初始化）：
 *          1.显式赋值
 *          2.静态代码块
 * 以上两种赋值方式，必须且只能选择其一。其他的赋值方式，比如在创建对象过程中的赋值方式，都是不可以的
 *
 *
 * 注意：
 *      1.final static 还是 static final 实测下来，都是可以的，根据个人习惯使用即可。
 *      2.final修饰静态成员变量是一个全局常量，不会害怕外界访问和修改。所以在很多时候，它的访问权限修饰符都是public的。(当然具体情况具体分析,访问权限根据实际场景给出)
 *      3.(扩展)如果使用静态代码测试类加载，那么访问类的全局常量，有些场景是不会触发类加载的。（感兴趣自己测试一下，作为锻炼动手能力的小demo）
 *
 * @since 11:04
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        System.out.println(A.NUM);
    }
}

class A {
    static final int NUM = 100;
    static final int NUM2;

    static {
        NUM2 = 200;
    }
}